package ch.ifage.business.dom;

import java.util.ArrayList;
import java.util.List;

//import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.Entity;
//import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
//import javax.persistence.JoinColumn;
//import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;

/**
 * Modele d'une entreprise.
 * @author Betty Ba
 */
/** *correspond a la table entreprises de la base de donnees.*/
@Entity
@Table(name = "entreprises")
@Inheritance (strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "TYPE", discriminatorType = DiscriminatorType.STRING, length = 20)
public abstract class Entreprise {
	/** *Identifiant.*/
	@Id
	@Column(name = "id_entreprise")
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private int mId;
	 /** *Nom d'une entreprise.*/
	@Column(name = "raison_sociale")
	private String mRaisonSociale;
	/** *Adresse.  */
	@Column(name = "adresse")
	private String mAdresse;
	/** *Personne de contact.  */
	@Column(name = "contact")
	private String mResponsable;
	/** *Num�ro de t�l�phone.  */
	@Column(name = "telephone")
	private String mTelephone;
	/** *Adesse e-mail.  */
	@Column(name = "email")
	private String mEmail;	
	//@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
	//@JoinColumn(name = "id_entreprise", nullable = true)
	/** *Les polices d'assurances couvrant l'entreprise.  */
	@Transient
	private List<Police> mListePolices;
	@Column(name = "numero_utilisateur")
	/** *Num�ro d'utilisateur pour la connexion du client ou assureur.  */
	private int mNumeroUtilisateur;
	/** *Constructeur.  */
	public Entreprise() {
		this.mListePolices = new ArrayList<Police>();
	}
	public int getId() {
		return mId;
	}
	/** * @param raisonSociale
	 *    Constructeur alternatif avec le nom d'une entreprise*/
	public Entreprise(final String raisonSociale) {
		this.mRaisonSociale = raisonSociale;
	}
	/** * @return le nom de l'entreprise. */
	public final String getRaisonSociale() {
		return this.mRaisonSociale;
	}
	/** * @param raisonSociale
	 *    Le nom de l'entreprise.*/
	public final void setRaisonSociale(final String raisonSociale) {
		this.mRaisonSociale = raisonSociale;
	}
	/** * @return L'adresse. */
	public final String getAdresse() {
		return mAdresse;
	}
	/** * @param adresse
	 *    L'adresse � sp�cifier.*/
	public final void setAdresse(final String adresse) {
		this.mAdresse = adresse;
	}
	/** * @return La personne de contact. */
	public final String getResponsable() {
		return mResponsable;
	}
	/** * @param responsable
	 *    la personne de contact � sp�cifier.*/
	public final void setResponsable(final String responsable) {
		this.mResponsable = responsable;
	}
	/** * @return Le numero de t�l�phone. */
	public final String getTelephone() {
		return mTelephone;
	}
	/** * @param telephone
	 *    Le num�ro de t�l�phohne � sp�cifier.*/
	public final void setTelephone(final String telephone) {
		this.mTelephone = telephone;
	}
	/** * @return L'E-mail. */
	public final String getEmail() {
		return mEmail;
	}
	/** * @param email
	 *    L'adresse e-mail � sp�cifier.*/
	public final void setEmail(final String email) {
		this.mEmail = email;
	}
	/** * @return La liste des polices. */
	public final List<Police> getListePolices() {
		return mListePolices;
	}
	/** * @return Le numero d'utilisateur permettant de se connecter. */
	public final int getNumeroUtilisateur() {
		return mNumeroUtilisateur;
	}
	/** * @param numeroUtilisateur
	 *    Le num�ro d'utilisateur pour la connexion du client ou assureur.*/
	public final void setNumeroUtilisateur(final int numeroUtilisateur) {
		this.mNumeroUtilisateur = numeroUtilisateur;
	}
	/** * @return la cl�. */
	public final String getKey() {
		return String.valueOf(hashCode());
	}
	/** * @return le nom de l'entreprise dont on obtient
	 * le hashCode, sinon -1 est retourn�. */
	public final int hashCode() {
		if (this.mRaisonSociale != null) {
			return this.mRaisonSociale.hashCode();
		} else {
			return -1;
		}
	}
}

